﻿/*
Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/

(function(){
    CKEDITOR.config.jqueryOverrideVal=typeof CKEDITOR.config.jqueryOverrideVal=='undefined'?true:CKEDITOR.config.jqueryOverrideVal;
    var a=window.jQuery;
    if(typeof a=='undefined')return;
    a.extend(a.fn,{
        ckeditorGet:function(){
            var b=this.eq(0).data('ckeditorInstance');
            if(!b)throw 'CKEditor not yet initialized, use ckeditor() with callback.';
            return b;
        },
        ckeditor:function(b,c){
            if(!CKEDITOR.env.isCompatible)return this;
            if(!a.isFunction(b)){
                var d=c;
                c=b;
                b=d;
            }
            c=c||{};
            
            this.filter('textarea, div, p').each(function(){
                var e=a(this),f=e.data('ckeditorInstance'),g=e.data('_ckeditorInstanceLock'),h=this;
                if(f&&!g){
                    if(b)b.apply(f,[this]);
                }else if(!g){
                    if(c.autoUpdateElement||typeof c.autoUpdateElement=='undefined'&&CKEDITOR.config.autoUpdateElement)c.autoUpdateElementJquery=true;
                    c.autoUpdateElement=false;
                    e.data('_ckeditorInstanceLock',true);
                    f=CKEDITOR.replace(h,c);
                    e.data('ckeditorInstance',f);
                    f.on('instanceReady',function(i){
                        var j=i.editor;
                        setTimeout(function(){
                            if(!j.element){
                                setTimeout(arguments.callee,100);
                                return;
                            }
                            i.removeListener('instanceReady',this.callee);
                            j.on('dataReady',function(){
                                e.trigger('setData.ckeditor',[j]);
                            });
                            j.on('getData',function(l){
                                e.trigger('getData.ckeditor',[j,l.data]);
                            },999);
                            j.on('destroy',function(){
                                e.trigger('destroy.ckeditor',[j]);
                            });
                            if(j.config.autoUpdateElementJquery&&e.is('textarea')&&e.parents('form').length){
                                var k=function(){
                                    e.ckeditor(function(){
                                        j.updateElement();
                                    });
                                };
                                
                                e.parents('form').submit(k);
                                e.parents('form').bind('form-pre-serialize',k);
                                e.bind('destroy.ckeditor',function(){
                                    e.parents('form').unbind('submit',k);
                                    e.parents('form').unbind('form-pre-serialize',k);
                                });
                            }
                            j.on('destroy',function(){
                                e.data('ckeditorInstance',null);
                            });
                            e.data('_ckeditorInstanceLock',null);
                            e.trigger('instanceReady.ckeditor',[j]);
                            if(b)b.apply(j,[h]);
                        },0);
                    },null,null,9999);
                }else CKEDITOR.on('instanceReady',function(i){
                    var j=i.editor;
                    setTimeout(function(){
                        if(!j.element){
                            setTimeout(arguments.callee,100);
                            return;
                        }
                        if(j.element.$==h)if(b)b.apply(j,[h]);
                    },0);
                },null,null,9999);
            });
            return this;
        }
    });
if(CKEDITOR.config.jqueryOverrideVal)a.fn.val=CKEDITOR.tools.override(a.fn.val,function(b){
    return function(c,d){
        var e=typeof c!='undefined',f;
        this.each(function(){
            var g=a(this),h=g.data('ckeditorInstance');
            if(!d&&g.is('textarea')&&h){
                if(e)h.setData(c);
                else{
                    f=h.getData();
                    return null;
                }
            }else if(e)b.call(g,c);
            else{
            f=b.call(g);
            return null;
        }
        return true;
        });
    return e?this:f;
};

});
})();
